Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

142
Vistas
Agregar atributo a la instancia de "Número"

Quiero ver si un número es un múltiplo de π . Entonces, idealmente, se comportaría exactamente como un número ordinario, pero con una funcionalidad adicional:

 >>> pi 3.14... >>> pi.isMultipleOfPi true >>> b = pi * 5 >>> b.isMultipleOfPi true

con ilusiones

 >>> c = pi + 1 >>> c.isMultipleOfPi false >>> d = pi + 2 * pi >>> d.isMultipleOfPi true

¿Hay alguna manera de lograr algo así en Javascript? Creo que esto sería bastante sencillo en Python, pero parece que no hay forma de crear sobrecargas para sumas/multiplicaciones, etc. en JS. Si lo hubiera, simplemente podría extender la clase Number .

Establecer algo en Number.prototype = function tampoco parece funcionar, ya que lo establece para toda la clase y no en una instancia.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

No puede agregar propiedades a valores numéricos específicos ; no son objetos y por lo tanto no pueden tener ninguna propiedad. Puede agregar propiedades al prototipo de Número, de la siguiente manera:

 Object.defineProperty(Number.prototype, "isMultipleOfPi", { get: function() { return this.valueOf() % Math.PI === 0; } }); const pix2 = Math.PI * 2; console.log(pix2.isMultipleOfPi); console.log((7).isMultipleOfPi);

Eso agrega una propiedad de prototipo de Número definida con una función "obtener" para que el código que publicó funcione como espera. El método estará disponible para todos los números en su programa, lo que no parece malo si desea esa función.

Tenga en cuenta también que muchas personas desaprueban la extensión de objetos prototipo integrados. En mi ejemplo, amplié el prototipo de una manera que mejora algunos de los problemas con los prototipos extendidos.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Al principio pensé que quería hacer esto para todos los números, que se responde aquí .

Pero si solo desea hacer esto para un número específico, puede hacerlo, pero probablemente no quiera hacerlo. El 99.9999999999998% de todos los números con los que trabaja en JavaScript son primitivos, no objetos, por lo que no tienen ninguna propiedad (las que parecen tener solo provienen de Number.prototype [o, a su vez, de Object.primitive ], que utilizará el motor de JavaScript si intenta acceder a una propiedad en un número primitivo).

En su lugar, podría crear un objeto numérico y ponerle la propiedad:

 const c = new Number(Math.PI); c.isMultipleOfPI = true; console.log(c); console.log(String(c)); console.log(c.isMultipleOfPI);

Sin embargo, el problema con eso se demuestra en console.log(c); línea de arriba. Con las herramientas de desarrollo de Chrome (y quizás otras), verás esto:

 { isMultipleOfPI: true, }

en lugar de 3.141592653589793 como podría estar esperando.

La razón es que c es un objeto , no una primitiva, y algunas cosas que lo usan (como console.log ) pueden tratarlo principalmente como un objeto en lugar de como un número.

Sin embargo, las matemáticas y la concatenación de cadenas funcionan:

 const c = new Number(Math.PI); c.isMultipleOfPI = true; console.log(c * 2); console.log(c - 2); console.log(c + 2); console.log(c / 2); console.log("The number is " + c);

Solo tenga en cuenta que las instancias de Number (objetos) son objetos, y que muy, muy poco código está escrito explícitamente para trabajar con ellos correctamente. La mayoría del código que usa números espera números primitivos .

Alternativamente, puede crear una propiedad de acceso en Number.prototype ( Pointy le muestra cómo ) que determina si el número al que se llama es un múltiplo de PI y devuelve la bandera correcta. Eso le daría la sintaxis que mostró, pero en todos los números. Pero es una llamada de función, por lo que acceder a la propiedad funciona cada vez. Simplemente tener una isMultipleOfPI(num) podría ser más claro.

En un comentario que has escrito:

Porque Number.prototype = function(){ return self % Math.PI ~ 0 } no es lo que estoy buscando. Me gustaría distinguir entre 3.14 y 3.14 con la propiedad isMultipleOfPi.

La única forma de hacerlo es usar objetos Number en lugar de números primitivos, como se describe anteriormente.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda